gpt4 book ai didi

javascript - 使用 Selenium 单击伪元素

转载 作者:数据小太阳 更新时间:2023-10-29 04:11:13 25 4
gpt4 key购买 nike

我正在尝试使用 Selenium 单击::after 伪元素。我意识到这不能直接通过 WebDriver 完成,但似乎无法找到使用 Javascript 的方法。

这是 DOM 的样子:

<em class="x-btn-split" unselectable="on" id="ext-gen161">
<button type="button" id="ext-gen33" class=" x-btn-text">
<div class="mruIcon"></div>
<span>Accounts</span>
</button>
::after
</em>

这就是上面的元素的样子。对象的左侧是“按钮”元素,右侧是带箭头的 :after 元素,单击该箭头会弹出下拉菜单。正如您所看到的那样,右侧没有任何标识符,这在一定程度上使这很难做到。

Element to be clicked

我在 stackoverflow 中看到了这两个链接,并试图将答案结合起来形成我的解决方案,但无济于事。

Clicking an element in Selenium WebDriver using JavaScript
Locating pseudo element in Selenium WebDriver using JavaScript

这是我的一个尝试:

string script = "return window.getComputedStyle(document.querySelector('#ext-gen33'),':before')";
IJavaScriptExecutor js = (IJavaScriptExecutor) Session.Driver;
js.ExecuteScript("arguments[0].click(); ", script);

其中我得到这个错误:

System.InvalidOperationException: 'unknown error: arguments[0].click is not a function
(Session info: chrome=59.0.3071.115)
(Driver info: chromedriver=2.30.477700 (0057494ad8732195794a7b32078424f92a5fce41),platform=Windows NT 6.1.7601 SP1 x86_64)'

我也尝试过使用 Selenium 中的 Actions 类来引用左侧移动鼠标,类似于 this answer以及。我想这可能是因为我不知道偏移量是用什么来衡量的,而且文档似乎也没有给出任何指示。我认为它是以像素为单位的??

Actions build = new Actions(Session.Driver);
build.MoveToElement(FindElement(By.Id("ext-gen33"))).MoveByOffset(235, 15).Click().Build().Perform();

这次尝试似乎点击了某处,因为它没有给出任何错误,但我不太确定是哪里。

如果有帮助,我正在尝试在 c# 中自动化 Salesforce(服务云)。

也许有人可以提供解决方案?

最佳答案

我在为 Salesforce 编写 Selenium 测试时遇到了同样的问题,并通过使用 Actions 直接控制鼠标设法解决了这个问题。

此按钮的包装表具有 250 像素的硬编码宽度,您已经发现了这一点。要定位鼠标的位置,您可以使用 contextClick() 方法而不是 Click()。 它模拟鼠标右键,因此它将始终打开浏览器菜单。

如果你这样做:

Actions build = new Actions(Session.Driver);
build.MoveToElement(FindElement(By.Id("ext-gen33"))).ContextClick().Build().Perform();

您会发现鼠标移动到 WebElement 的中间,而不是左上角(我认为它也是)。由于该元素的宽度是恒定的,我们只需将鼠标向右移动 250/2 - 1 就可以了:)代码:

Actions build = new Actions(Session.Driver);
build.MoveToElement(FindElement(By.Id("ext-gen33"))).MoveByOffset(124, 0).Click().Build().Perform();

关于javascript - 使用 Selenium 单击伪元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45427223/

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