Selenium WebDriver语言 - 有一个带有两个点击区的按钮,而 Selenium 没有正确点击



好的伙计们,

正在通过guidewire询问索赔申请,这就是我遇到问题的地方。

标题区域有标题按钮,其中一个是声明,此按钮有两个单击区域,当您单击声明标签时,它会

想起您上次打开的声明,当您单击向下箭头时,它会打开并显示更多选项。

我想得到的选项是"新索赔"

FirePath 向我展示了两个独立的 xPath

对于声明标签:.//[@id='TabBar:ClaimTab-btnInnerEl']对于向下箭头标签:.//[@id='TabBar:ClaimTab-btnWrap']启动向下箭头后,New Claim 的 xpath:.//*[@id='TabBar:ClaimTab:ClaimTab_FNOLWizard-textEl']

但是,当我编写脚本时:

    driver.findElement(By.xpath(".//*[@id='TabBar:ClaimTab-btnWrap']")).click();
    driver.findElement(By.xpath(".//*[@id='TabBar:ClaimTab:ClaimTab_FNOLWizard-textEl']")).click();

它不断单击错误的区域并调用最后一个声明,脚本失败。

下面是预期行为的截屏视频:http://screencast.com/t/jtI1kGkfmXK

这基本上是它的作用http://screencast.com/t/s2Q6VrbJl

我该怎么做才能规避这个问题?它让我发疯。

我从这里得到了帮助

试试这段代码,看看它是否有效:

driver.findElement(By.xpath("//span[@id='TabBar:ClaimTab-btnWrap']")).sendKeys(Keys.ARROW_DOWN);
好吧,

我可以收集的是您必须到达"新声明"范围并单击它。

您可以使用Javascriptexecutor并直接单击"新声明",即使不提出它。它有助于您要单击的预期元素具有唯一 ID。

因此,您可以使用以下内容:

var js = Driver as IJavaScriptExecutor;
 if (js != null)
{
    js.ExecuteScript("document.getElementById('TabBar:ClaimTab:ClaimTab_FNOLWizard-textEl').click();") 
}

您需要单击打开窗口并等待它打开。所以第一次点击后需要等待一些然后,您可能必须使用switchTo()将焦点设置在新打开的下拉窗口上。这里有一些如何使用它的例子。之后,使用文本库搜索来查找元素。像这样的东西。

编辑:我发现在这种情况下,文本库搜索有很大帮助。试试这个:

driver.findElement(By.xpath(".//*[@id='TabBar:ClaimTab-btnWrap']")).click();
//use some static delay for now. But, really you should use some fluent wait for the element to appear.
driver.findElement(By.xpath(".//*[.='New Claim']")).click();

我想通了!我不得不使用动作类,但这奏效了!它有点奇怪,但它有效

    WebElement element = driver.findElement(By.linkText("Claim"));
    Actions builder = new Actions(driver);
    Action dropdown = builder.clickAndHold(element)
    .sendKeys(Keys.ARROW_DOWN).sendKeys(Keys.ARROW_DOWN) 
    .build();
    dropdown.perform();

    driver.findElement(By.xpath(".//*[@id='TabBar:ClaimTab:ClaimTab_FNOLWizard-textEl']")).click();

最新更新