GDo*_*cal 5 c# selenium android selenium-chromedriver
我正在使用 ChromeDriver 为 Android Chrome 浏览器编写测试。我使用 C#。我的目标是并行使用几个 chrome 标签。当一个页面因加载一些数据或进行一些计算而卡住时,我想切换到另一个选项卡并进行另一次测试,并不时进行一些检查:上一页是否已加载,如果是,则对其进行另一项工作。
问题:当您设置 driver.Url或单击加载另一个页面的元素时,您的线程会卡住,直到加载整个页面。对我来说不行。但我找到了解决方法,我可以像这样超时执行脚本:
driver.ExecuteScript(string.Format("setTimeout(function() {{ location.href = \"{0}\" }}, 150);", url));
Run Code Online (Sandbox Code Playgroud)
现在至少我的 C# 线程没有卡住。
现在我需要有办法检查页面加载是否完成。理论解决方案:在执行上面的代码之前,我可以从文档中获取 HTML 元素并检查一些它的属性,在加载新页面后,我要求旧元素的任何属性(不再存在) - 我会得到 StaleElementReferenceException。所以我的计划听起来不错,但行不通。当页面正在加载并且我询问元素的属性时 - 我的踏板一直卡在页面加载之前。我使用 fiddler 代理来增加页面加载时间,以便有足够的时间来调查这个问题(我冻结了页面加载并降低了我通过 fiddler 的连接速度)。此外,我尝试不访问任何 DOM 元素,而只是执行“return true;”之类的脚本。- 同样的问题,直到页面加载为止。
有没有办法不等待页面加载?也许是否可以使用不同的 chromedriver 实例连接到不同的选项卡?我将不胜感激任何建议!
ChromeDriver 版本:2.27.440174 System1:Windows 10 x64 System2:Samsung S6 Android 6.0.1
更新 1:我发现https://github.com/bayandin/chromedriver/blob/e9a1f55b166ea62ef0f6e78da899d9abf117e88f/chrome/page_load_strategy.h 在那里我可以看到三种类型的行为:正常、无、急切;似乎默认情况下 ChromeDriver 使用 Normal。这意味着等到页面加载完毕。我需要使用 None - 这意味着不要等待任何东西(正是我需要的),但我无法让它工作。我都试过:
chromeOptions.AddAdditionalCapability("webdriver.load.strategy", "none");
chromeOptions.AddAdditionalCapability("pageLoadStrategy", "none");
Run Code Online (Sandbox Code Playgroud)
我收到了下一个错误:“未知错误:无法解析功能:chromeOptions\n来自未知错误:无法识别的 chrome 选项:pageLoadStrategy\n(驱动程序信息:chromedriver=2.27.440174(e97a722caafc2d3a8b807ee115bfb307f7d2c0=307ee115bfb307f7d2c00=307e115bfb307f7d2c0=30)。Windows16400000”
这是我的解决方案:
private class ChromeOptionsEx: ChromeOptions
{
public override ICapabilities ToCapabilities()
{
var r =(DesiredCapabilities)base.ToCapabilities();
r.SetCapability("pageLoadStrategy","none");
return r;
}
}
Run Code Online (Sandbox Code Playgroud)
使用 ChromeOptionsEx 而不是 ChromeOptions。这些代码行:
chromeOptions.AddAdditionalCapability("webdriver.load.strategy", "none");
chromeOptions.AddAdditionalCapability("pageLoadStrategy", "none");
Run Code Online (Sandbox Code Playgroud)
不起作用,因为它将被添加到 ChromeOptions 中,但 pageLoadStategy 不是 chrome optionts,它是功能。Chrome 驱动程序希望在功能根中找到它。说明:ChromeOptions 生成下一个功能图:
其中 chromeOptions 是
| 归档时间: |
|
| 查看次数: |
6095 次 |
| 最近记录: |