selenium自动化测试学习记录

环境搭建步骤

  • 安装python环境
  • 通过pip下载selenium
    • 打开控制台或者终端
    • python -m pip install --upgrade pip 更新pip到最新版本
    • 如果安装失败可试添加--userpython -m pip install --user --upgrade pip
    • 安装seleniumpip install [-U] selenium

自动化环境搭建完毕


模仿鼠标键盘的链式操作ActionChains

1
2
3
4
5
6
7
8
9
10
11
from selenium import webdriver
from selenium.webdriver import ActionChains

driver = webdriver.Chrome()
driver.get('https://www.baidu.com')

# 定位到文本框
inp = driver.find_element_by_id('kw')

# 链式
ActionChains(driver).click().send_keys('php是世界上最好的语言').context_click().perform()

操作js代码进行标签属性的删除

1
2
3
4
# 百度主页
inp = driver.find_element(By.PARTIAL_LINK_TEXT, '主页 ')

driver.execute_script('arguments[0].removeAttribute("target")', inp)

driver.implicitly_wait()与time.sleep()的区别

作者:乐乐熊小妹
来源:https://www.cnblogs.com/lelexiong/p/9875157.html

1
2
3
4
5
# 隐式等待,5秒钟内只要找到了元素就开始执行,5秒钟未找到超时
driver.implictly_wait(5)

# 延时5秒执行
time.sleep(5)

如何灵活运用这两种方式:

当某个页面元素变化多,影响多的情况下,用sleep,等页面元素稳定了,再定位。

如果用implicitly_wait(5),还没等页面元素稳定后就定位 ,导致定位不准确,比如操作某个元素后,会出现提示框,影响了后面元素的位置,导致定位不准确;所以用sleep,等提示框消失后开始定位


执行JavaScript语句实现相应操作

  • driver.execute_script('') 在’’里输入js语句

比如:

1
2
# 页面滚动300px
driver.execute_script('window.scrollTo(0, 300)')

使用select类进行下拉框值的选择

可使用selenium提供的select类进行下拉框值的选择

这里使用的Java语言来描述,演示的是用下拉框文本来选择对应条目
也可以用indexvalue来实现,select类都提供了相应的方法

1
2
Select select = new Select(WebElement arg);
select.selectByVisibleText("下拉选项文本");

关于浏览器(含国产)和webdriver等环境配置

这里以配置国产QQ浏览器为例

1
2
3
4
5
6
7
8
9
10
// 通过 chrome options 配置QQ浏览器启动
ChromeOptions op = new ChromeOptions();
op.setBinary("C:\\Program Files (x86)\\Tencent\\QQBrowser\\QQBrowser.exe");
WebDriver driver = new ChromeDriver(op);

// 或者
// 通过设置环境变量配置QQ浏览器启动
System.setProperty("webdriver.chrome.bin", "C:\\Program Files (x86)\\Tencent\\QQBrowser\\QQBrowser.exe");
// 通过设置环境变量配置 chromedriver
System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");

frame/iframe相关

frame / iframe操作常用的语句:

1
2
3
4
5
6
7
8
9
10
11
12
// 通过 frame / iframe 在页面中的索引进行定位
driver.switchTo().frame(int index);
// 通过 frame / iframe 的 id 或 name 进行定位
driver.switchTo().frame(String id_or_name);
// 通过普通方式定位到 frame, 然后再进行跳转
driver.switchTo().frame(WebElement element);

// 跳转到父层(上一层)框架
driver.switchTo().parentFrame();

// 跳转到初始内容,即原始层
driver.switchTo().defaultContent();