【问题标题】:Unable to locate element in Sitecore 8.1 (selenium and c#)无法在 Sitecore 8.1(硒和 c#)中找到元素
【发布时间】:2016-10-07 04:59:23
【问题描述】:

我正在尝试使用 Chrome、Selenium 和 c# 在 Sitecore 8.1 中运行一些自动化测试。我的代码不想在 Sitecore 页面中找到任何元素,尤其是体验编辑器。 我遇到了“无法定位元素”警告。

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

<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>

这是它的 XPath:

/html/body/div/div/div[1]/nav[1]/a[3]

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

我试过了:

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

这给了我“无法定位”的错误

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

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

我已经尝试了很多其他选项/组合来尝试获取替代文本等,但我就是无法获取元素。

有什么想法吗?如果您需要更多信息,请告诉我。

谢谢

【问题讨论】:

    标签: c# selenium automation sitecore


    【解决方案1】:

    改变这一行

    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");
    

    希望它会起作用...:)

    【讨论】:

    • 嗨,谢谢,试过了,它仍然给我“不允许的复合类名”。当我上次查看此“复合”错误时,它建议删除空格并用句号替换它们。但这没有用。另一个提到使用逗号然后句号,但这两个选项都返回“无法定位元素”。
    • @geneticmaterial 这是因为.className 方法不支持复合类名称。见stackoverflow.com/questions/20361643
    • @geneticmaterial 你实现了WebDriverWait吗??...并确保你想要定位和点击的元素不在任何框架内??
    • @geneticmaterial 那么框架呢?这里有没有框架??
    • @geneticmaterial 是的......这就是问题......你需要先切换那个框架然后去寻找元素......
    【解决方案2】:

    根据@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!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-01
      • 2019-01-24
      • 2022-01-23
      • 2021-08-12
      • 2019-05-05
      • 2021-08-15
      • 1970-01-01
      • 2019-09-09
      相关资源
      最近更新 更多