我尝试使用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();
这给了我一个关于无法使用复合类名的错误。
我尝试了大量其他选项/组合尝试选择替代文字等,但我却无法获取该元素。
有什么想法吗?如果您需要更多信息,请与我们联系。
由于
答案 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!