写点什么

技术分享 | web 自动化测试 - 执行 JavaScript 脚本

  • 2022 年 9 月 26 日
    北京
  • 本文字数:1812 字

    阅读完需:约 6 分钟

在页面上直接执行 js


在某个已经定位的元素上执行 js


执行 jsSelenium 可以通过 execute_script() 来执行 JavaScript 脚本。


driver.execute_script:同步执行 JavaScript 在当前的窗口框架下


js 脚本可以在浏览器的开发者工具 -> Console 中进行调试


js 的返回结果获取元素控件中的属性值


与 Selenium 结合,在代码中返回 js 结果


Python 版本

获取网页性能的响应时间,js 脚本中使用 return 代表返回获取的结果

js = "return JSON.stringify(performance.timing);"driver.execute_script(js)


Java 版本// 获取网页性能的响应时间,js 脚本中使用 return 代表返回获取的结果 String js = "return JSON.stringify(performance.timing);";JavascriptExecutor j = (JavascriptExecutor) driver;j.executeScript(js);


arguments 传参执行 JavaScript 也可以通过传参的方式传入元素信息,还可以通过下面的方法点击被遮挡的元素。


例如:某个元素在实际的操作过程中被其他的元素遮挡,就可以使用 js 点击的方式


Python 版本 element = driver.find_element(by, locator)#arguments[0]代表所传值 element 的第一个参数 #click()代表 js 中的点击动作 driver.execute_script("arguments[0].click();",element)


Java 版本 WebElement element = driver.findElement(By);// arguments[0]代表所传值 element 的第一个参数// click()代表 js 中的点击动作 JavascriptExecutor j = (JavascriptExecutor) driver;j.executeScript("arguments[0].click();", element);


自动化过程中的报错如下:


Other element would receive the click:<label class="custom-control-label" for="user_remember_me">...</label>


如果出现上面的错误,可以使用 js 的方式进行点击。


实战演示以企业微信为例,使用 js 点击添加图片


#导入依赖 from selenium import webdriverfrom selenium.webdriver.common.by import By


class TestWework:def setup(self):self.driver = webdriver.Chrome()#隐式等待 self.driver.implicitly_wait(10)


def test_upload(self):    #元素定位    element_add = self.driver.find_element\        (By.CSS_SELECTOR, ".js_upload_file_selector")    #执行js代码    self.driver.execute_script\        ("arguments[0].click();", element_add)    self.driver.find_element_by_id('js_upload_input').\        send_keys('D:\project\demo1\demo.png')    assert len(self.driver.find_elements(By.CSS_SELECTOR,\        '.material_pic_list_item')) == 1
def teardown(self): self.driver.quit()
复制代码


import org.junit.jupiter.api.AfterAll;import org.junit.jupiter.api.BeforeAll;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.JavascriptExecutor;import org.openqa.selenium.WebElement;import org.openqa.selenium.chrome.ChromeDriver;


import java.util.concurrent.TimeUnit;


import static org.junit.jupiter.api.Assertions.assertEquals;


public class Web2Test {private static ChromeDriver driver;


@BeforeAllpublic static void setUp() {    System.setProperty(            "webdriver.chrome.driver",            "/driver/chrome95/chromedriver"    );    driver = new ChromeDriver();    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);}
@AfterAllpublic static void tearDown() { driver.quit();}
@Testpublic void uploadTest() { // 元素定位 WebElement element_add = driver.findElement(\ By.cssSelector(".js_upload_file_selector")); // 执行js代码 JavascriptExecutor j = (JavascriptExecutor) driver; j.executeScript("arguments[0].click();", element_add); driver.findElement(By.id("js_upload_input"))\ .sendKeys("D:\\project\\demo1\\demo.png"); int num = driver.findElements(By.cssSelector\ (".material_pic_list_item")).size(); assertEquals(num, 1);}
复制代码


}


在测试工作中,JavaScript 也是经常会用到的,所以大家还是要多多练习,才能掌握的更扎实。


点击下方链接免费领取:性能测试+接口测试+自动化测试+测试开发+测试用例+简历模板+测试文档

http://qrcode.testing-studio.com/f?from=infoQ&url=https://ceshiren.com/t/topic/22265

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019.10.23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
技术分享 | web自动化测试-执行 JavaScript 脚本_霍格沃兹测试开发学社_InfoQ写作社区