好的伙计们,
我正在通过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();