selenium&POM&python

本文详细介绍了使用Selenium进行Web自动化测试的步骤和技巧,包括安装、浏览器驱动、页面元素操作、表格处理、异常处理等。在表格操作中,提供了动态获取任意单元格信息的方法。此外,还分享了一些实战中遇到的问题及解决方案,如页面跳转延迟、元素查找错误等,并给出了相应的解决建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、下载selenium包:

pip install selenium

二、引用包:

from selenium import webdriver

三、下载对应浏览器的驱动
四、使用驱动打开浏览器:

browser=webdriver.Chrome()

五、打开指定网页:

browser.get("xxxxx")#xxxx为网页的url

六、获取指定页面元素(可用id,name,xpath等)
1、根据id等信息查找元素:
ele=browser.find_element_by_id(“xxx”)#xxx为id
在这里插入图片描述
2、对元素的操作
在这里插入图片描述
3、xpath方式查找元素:
在这里插入图片描述
4、模拟鼠标:
在这里插入图片描述
在这里插入图片描述
5、处理网页的表格:(此部分转于https://www.cnblogs.com/clarke157/p/6812157.html
假设网页页面有一个表格,如何获取这个table的指定cell的值?你会说我们可以根据xpath定位到这个cell的行列,然后getText(),不错,但是页面的表格经常都不是固定的,如果这个表格增加或删除一些行列该如何处理?

我们可以把这个问题抽象出来,所有的html table不外乎是由 table 元素以及一个或多个 tr、th 或 td 元素组成,我们可以将行和列参数化,通过传入行和列的值获取返回的text信息。

这样我们可以根据输入参数获取任意一个cell的信息了。

public static String tableCell(WebDriver driver,int row, int column)
    {
        String text = null;
        //去掉表头
        row=row+1;
        String xpath="//*[@id='xxxx']/tbody/tr["+row+"]/td["+column+"]";
        WebElement table=driver.findElement(By.xpath(xpath));
        text=table.getText();
        return text;
    }

6、可以用以下2句查找表格中包含“化妆品”字样的列,然后定位td下的input元素:
//td[contains(.,‘化妆品’)]/input[1]
element = driver.find_element_by_xpath(’//td[contains(.,‘化妆品’)]/input[1]’)
先找到包含元素的单元格,在此单元格中再寻找子元素即可。表达式//td[contains(.,‘化妆品’)]表示模糊匹配文本内容包含“化妆”关键字的单元格td元素,//input[1]表示定位td下的第一个input子元素。
7、遍历表格中所有单元格:

from selenium import webdriver
driver = webdriver.Firefox()
driver.get(r'file:///D:/pythonSeleniumTestCode/pythonStu/src/table.html')
 #id定位方式获取整个表格对象
 table = driver.find_element_by_id('table')
 #通过标签名获取表格中所有行
 trlist = driver.find_elements_by_tag_name('tr')
 print(len(trlist))
 for row in trlist:
    #遍历行对象,获取每一个行中所有的列对象
    tdlist = row.find_elements_by_tag_name('td')
    for col in tdlist:
       print(col.text + '\t',end='')
    print('\n')
 driver.quit()

七、其他小tips:
1、browser.maximize_window():最大化浏览器窗口
2、遇到的小坑:selenium控制点击按钮之后跳转到新页面,但是查看browser.current_url,还停留在上一个页面。
解决方法:
click跳转之后sleep()几秒,等待页面实际跳转,就可以找到元素了。
3、一不小心把find_elementby_xxx,打成了findelements_by_xxx,所以在执行点击的时候报错list没有click()事件。
4、使用click()的时候在元素的后面加了():
deleteStuBtn=browser.find_element_by_xpath('//[@id="app"]/div/div[2]/div/div[2]/div[2]/div[1]/div[3]/table/tbody/tr/td[5]/div/button[2]') deleteStuBtn().click()#------------------------错的!!
应该是:deleteStuBtn.click()
此问题引发的报错内容:
在这里插入图片描述
5、在spyder单步调试的时候可以找到元素,但是运行的时候找不到,此种情况可能是实际上还没有加载出来,可在查找上一级元素之后添加:

time.sleep(xxx)#xxx停顿几秒视情况而定

等待几秒后,很可能可以找到元素。
6、复选框的问题:
复选框的tag是input,但是要点击复选框的话,xpath无需定位到input,而只需定位到上一级的例如:span,即可调用click()进行点击。
7、报错:selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: ‘using’ must be a string
报错代码:
codeResultTxt=(By.XPATH,'//div[@class="code-result-right"]/div/p[@class="code-result-box"]')#控制台输出结果

coderesult=self.driver.find_element(self.codeResultTxt)

解决方法:搜索元素时要在元素xpath前加上*
代码改为:
codeResultTxt=(By.XPATH,'//div[@class="code-result-right"]/div/p[@class="code-result-box"]')#控制台
输出结果

coderesult=self.driver.find_element(*self.codeResultTxt)
在Python中使用Selenium进行POM (Page Object Model) 设计时,其思路主要是将页面的DOM元素抽象成独立的对象(通常是类),这样做的目的是为了提高代码的可读性和维护性。以下是POM设计的一般步骤和思路: 1. **创建Page对象**: 对每个具体的网页或页面创建一个Page对象,例如`LoginPage`, `ProductPage`等。这些对象通常包含了页面上的关键元素(如登录框、搜索框、下拉菜单等)及其属性和方法。 ```python class LoginPage: def __init__(self, driver): self.driver = driver self.username_field = driver.find_element_by_name("username") self.password_field = driver.find_element_by_name("password") self.login_button = driver.find_element_by_id("loginButton") def login(self, username, password): self.username_field.send_keys(username) self.password_field.send_keys(password) self.login_button.click() ``` 2. **模块化和封装**: 将相关的页面元素组织在一起,并尽可能地隐藏底层的DOM操作细节。这样,调用者只需要关心如何与页面对象交互,而不需要关注具体的页面元素定位。 3. **方法设计**: 提供与页面功能关联的方法,如登录、注册、填充表单等。这些方法应该清晰明确,易于理解。 4. **错误处理**: 使用try-except结构处理可能出现的异常,比如元素未找到、网络连接问题等。 5. **测试驱动开发(TDD)**: 采用TDD的方式编写测试用例,先编写期望的行为,然后让Page对象去实现它,这样可以保证代码的质量和功能的一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值