【发布时间】:2018-03-01 22:03:41
【问题描述】:
我正在尝试自动化一个环境选择屏幕,其中有多个可选按钮分别被一个跨度隐藏,这些按钮显示为图块。
我已设法导航到给定的图块并拉起按钮,但我无法单击它。
这是我的代码
public static void NavigateToEnvironment(IWebDriver driver, string environment)
{
IWait<IWebDriver> wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5.00));
wait.Until(ExpectedConditions.ElementIsVisible(By.XPath($"//span[text()='{environment}']")));
var tile = driver.FindElement(By.XPath($"//span[text()='{environment}']"));
Actions action = new Actions(driver);
action.MoveToElement(tile).Perform();
wait.Until(ExpectedConditions.ElementIsVisible(By.XPath($"//*[@span=(text()='{environment}')][@btn=(starts-with(text(), 'Start'))]")));
driver.FindElement(By.XPath($"//*[starts-with(text(), 'Start')]")).Click();
}
第一部分成功移动到正确的图块并打开跨度,因此屏幕上的按钮在那里。 wait.until 条件也很好,因此 Selenium 可以看到该元素,因此它是我遇到问题的最终点击命令。
似乎只是在寻找隐藏在图块一中的按钮,但我正在尝试图块三。所有按钮都具有相同的 HTML 标签。
在当前代码状态下,我得到元素不可见。
我尝试在等待条件下使用 xpath,但返回参数不是元素,因此再次失败。
我有点不知所措。有什么想法吗?
更新: 其中一个按钮的一些 HTML。这基本上以不同的应用程序名称重复
<li class="trans tile">
<div class="tileWrap noselect" aria-haspopup="true">
<div class="divNavIcon">
<span class="spnNavIcon primarycolorfont enable" data-bind="css: Code"></span>
</div>
<div class="tilePopup primarycolor">
<span data-bind="text: ApplicationNameAlias ? ApplicationNameAlias : ApplicationName">Enable QA</span>
<span data-bind="text: Description" class="tileSubText">Enable CI Environment</span>
<div class="tilePopupToggle">
<button type="button" data-bind="click: $parent.startApp, css: { disabled: IsRevoked }" class="btn">Start <i class="fa fa-fw fa-desktop"></i></button>
<button type="button" style="display:none;" data-bind="click: $parent.startAppNew, css: { disabled: IsRevoked }" class="btn">Start New <i class="fa fa-fw fa-external-link"></i></button>
<button type="button" style="display:none;" data-bind="attr: { "data-target": "#appPreview_" + ApplicationID }" class="btn" data-toggle="modal" data-target="#appPreview_3043">Preview <i class="fa fa-fw fa-play"></i></button>
</div>
</div>
</div>
帮助理解的屏幕截图 - 每个图块的行为方式相同,并带有一个隐藏的开始按钮。我的代码适用于第一个图块,但如果我想要第二个或第三个图块,它找不到开始按钮
【问题讨论】:
-
请用相关的HTML更新问题。
-
您能否将您的问题缩小到具体要求,即您究竟想点击哪个元素
Start,Start New或Preview -
老实说,我对 HTML 的速度并没有那么快,所以不能告诉你为什么那里有 3 个按钮。正如我在屏幕上看到的那样,这是我所追求的“开始”
标签: c# selenium selenium-webdriver