selenium&POM&python

一、下载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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值