gpt4 book ai didi

java - 使用 Webdriver 确定页面是否已更改

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:56:18 25 4
gpt4 key购买 nike

有时网页的可见内容取决于页面输入元素的状态(例如,输入元素“选择你的大学”可能仅在你在“工作”字段中选择“学生”后出现)或点击某些页面元素(像下拉菜单按钮)。我正在尝试使用 Selenium Webdriver 自动执行查找此类页面元素依赖项的过程。第一个想法是在文本输入字段中输入一些内容,设置选中/未选中的复选框,单击一些按钮/链接等,然后查看页面上是否有任何元素出现/消失。问题是:

  • 有没有一种简单的方法可以查明页面上的内容是否已出现?嗯,我可以在每次更改后制作从网页元素到 {'visible', 'invisible'} 状态的映射,并查明是否发生了某些变化,但是是否有内置的东西用于此目的?

    <
  • 点击一些按钮可能会导致加载另一个页面,我想留在我正在测试的页面中,有没有办法确定 click() 方法是否会导致加载另一个页面并阻止它?

最佳答案

Divi 对问题 2 的回答很好。对于第 1 部分,您可以检查元素是否像您所说的那样显示:

 webElement.isDisplayed();

或者您可以比较事件前后页面的 html。

driver.getPageSource();

(如果 url 在每次事件后发生变化,您也可以检查它)。

获取 html 源的一个问题是,事件可能在您的最后一个操作之后触发但尚未完成,从而使 html 保持不变。要解决此问题,您可以检查以下一些条件:

(Boolean) ((JavascriptExecutor)driver).executeScript("return jQuery.ready"); 
((JavascriptExecutor)driver).executeScript("return document.readyState").equals("complete");

或者您可能正在使用另一个具有类似于 jQuery.ready 的功能的 javascript 框架。

最后,您可能会遇到仅在更改 Activity 元素、跳出字段等后才触发事件的问题。因此您可以运行如下内容:

Actions actionObject = new Actions(driver); 
actionObject.sendKeys(Key.TAB).perform();

或者你可以使用 javascript 来设置它(我没有检查下面的代码,我会将 webElement 设置为 html 基本元素):

((JavascriptExecutor) driver).executeScript("arguments[0].focus();", webElement);

我不建议使用 webdriver 来点击 body 元素,因为这可能会撤消您上次的点击。

为了完整性,我将 Divi 对问题 2 的回答包括在内:

我们可以通过获取页​​面的 url 并将其与预期的 url 进行比较来检查它是否正在重定向到另一个页面

WebDriver driver;

driver.getCurrentUrl() // will returns the String value

如果您当前的 url 与您预期的 url 不匹配,那么您有两种方法

1) 您可以使用 selenium(或)webdriver 导航方法中的 Open 函数再次打开您期望的 url

driver.navigate().to("expected_url");

2) 你可以使用后退导航

driver.navigate().back();

关于java - 使用 Webdriver 确定页面是否已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12128930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com