我正在测试到我们网站的注册,并且其中一个字段是选择下拉菜单。该测试可在所有Windows桌面浏览器上完全运行。它也可以在Mac上的Chrome中运行。仅在Mac Safari 11.1上会出现此问题:
尝试选择我想要的选项时,它报告select元素不可见。
我的测试是在Visual Studio中通过Browserstack完成的。我有截屏和视频,清楚地表明select元素是可见的(至少对于用户而言)。它不在页面底部附近,没有页脚覆盖其中的任何部分。我滚动到每个元素进行交互。
我的故障排除:
要查看从select元素向下是否存在可访问性问题,我注释掉了与select元素进行交互并成功与其下面的元素(文本输入框)进行交互的代码。
< / li>我添加了30秒的等待时间,然后尝试选择一个选项,以防驱动程序/ DOM出现“看到”选择元素的任何延迟-同样的错误。
我仔细检查了XPath-在我们的本地Mac上,XPath仅返回1个结果,这是有问题的select元素(当您通过XPath搜索代码时,它会突出显示)。
我正在使用Selenium.Support.UI方法通过其文本选择一个选项。 'option'包含要选择的文本:
SelectElement select =新的SelectElement(element); select.SelectByText(option);
...所以我尝试通过更改索引来通过JavaScript选择:
// Selects the option but no option change occurs from the user's perspective, nor are any events triggered based on the change
js.ExecuteScript("arguments[0].selectedIndex = \"" + optionIndex + "\";", element);
// Trigger the change event
js.ExecuteScript("var event = new Event('change', { bubbles: true }); arguments[0].dispatchEvent(event);", element);
...这也不起作用,没有得到“元素不可见”,什么都没有改变,测试脚本继续进行下一个文本输入。
我验证了该方法是否可以通过在Windows的Chrome控制台上以及在Safari 11.1的Mac上手动进行测试(将select元素的ID更改为someID)来实现:
var element = document.getElementById("someID");
element.selectedIndex = "3";
var event = new Event('change', { bubbles: true });
element.dispatchEvent(event);
...工作正常。
因此,无论我在运行实际测试时尝试如何更改元素,要么看不见,要么什么都没有发生。太奇怪了...
我想念这里的明显之处吗?这有一个已知问题吗?我猜想,检查此问题的唯一其他方法是从等式中删除Browserstack并在Mac上进行本地测试。这可能是我应该做的第一件事...
答案 0 :(得分:0)
谢谢。
我在使用JavaScript变通方法时走在正确的轨道上,但是我的select元素没有ID,因此我必须先分配一个ID,然后JavaScript才更改选项...
js.ExecuteScript("arguments[0].setAttribute(\"id\", \"automationID\");", element);
js.ExecuteScript("var element = document.getElementById(\"automationID\"); element.selectedIndex = \"" + optionIndex + "\"; var event = new Event('change', { bubbles: true }); element.dispatchEvent(event);");