无法在Sitecore 8.1(selenium和c#)中找到元素

时间:2016-06-07 10:29:05

标签: c# selenium automation sitecore

我尝试使用Chrome和Selenium以及c#在Sitecore 8.1中运行一些自动化测试。我的代码并不想在Sitecore页面中找到任何元素,特别是体验编辑器。 我遇到了"无法找到元素"警告。

例如:我想要的项目.Click()是工具栏功能区按钮,用于显示工具栏菜单。 这是元素:

Shared Function EmailExists(email As String) As Boolean
    Return DB.GetInteger("select count(id) from [user] where deleted = 0 and active = 1 and email = @email", DB.SIP("email", email)) > 0
End Function

这是XPath:

  

/ HTML /体/ DIV / DIV / DIV [1] / NAV [1] / [3]

我延长了等待时间以使其可见,因为加载这些页面可能需要几秒钟。但这没有用。

我试过了:

<a data-sc-id="QuickRibbon" data-sc-click="trigger:button:toggleshow" data-sc-command="" data-sc-сontrolstaterequest="" data-sc-controlstateresult="" data-sc-postponedcall="" data-sc-ispressed="false" class="sc-quickbar-item sc-quickbar-button sc_QuickbarButton_53 data-sc-registered" title="Toggle the ribbon." data-sc-pagecodescriptfilename="" data-bind="ispressed: isPressed, visible: isVisible, click: click, command: command, enabled: isEnabled" data-sc-require="/-/speak/v1/ribbon/QuickbarButton.js" href="#" style="float:right"><img src="/sitecore/shell/client/Speak/Assets/img/Speak/Common/16x16/white/navigate_down.png" alt="Toggle the ribbon."></a>

这给了我&#34;无法找到&#34;错误

driver.FindElement(By.XPath("/html/body/div/div/div[1]/nav[1]/a[3]/img")).Click();

这给了我一个关于无法使用复合类名的错误。

我尝试了大量其他选项/组合尝试选择替代文字等,但我却无法获取该元素。

有什么想法吗?如果您需要更多信息,请与我们联系。

由于

2 个答案:

答案 0 :(得分:3)

更改此行

driver.findElement(By.className("class="sc-quickbar-item sc-quickbar-button sc_QuickbarButton_53 data-sc-registered"")).Click();

到下面一行: -

driver.findElement(By.className("sc-quickbar-item sc-quickbar-button sc_QuickbarButton_53 data-sc-registered")).Click();

已编辑1 ..

如果复合类在此处不起作用,您可以使用xpath执行操作,如下所示: -

var wait = new WebDriverWait(driver, TimeSpan.FromMinutes(1));
var clickableElement = wait.Until(ExpectedConditions.ElementToBeClickable(By.xpath("//a[@data-sc-id='QuickRibbon']")));
clickableElement.Click();

已编辑2 ..

如果元素出现在框架中,则需要在执行操作之前切换框架,如下所示: -

driver.SwitchTo().Frame("your frame name or id");

希望它能奏效...... :)

答案 1 :(得分:1)

根据@Software_engineer的建议,我设法编写了这个有效的方法:

Thread.Sleep(6000);
driver.SwitchTo().Frame(driver.FindElement(By.Id("scWebEditRibbon")));
var wait = new WebDriverWait(driver, TimeSpan.FromMinutes(1));
var clickableElement = wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//a[@data-sc-    id='QuickRibbon']")));
clickableElement.Click(); //click to drop down the toolbar
driver.SwitchTo().DefaultContent();

我需要切换到iframe!