当前位置: 首页 > 知识库问答 >
问题:

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

李俭
2023-03-14

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

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

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

这是它的 X 路径:

/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();

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

我已经尝试了一大堆其他的选项/组合来获取替代文本等,但是我就是不能让它获取元素。

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

谢谢

共有2个答案

韦知
2023-03-14

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

殷耀
2023-03-14

改变这条线

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

希望它会工作…:)

 类似资料:
  • [[Img1][Img2[Img3]我试图通过链接文本获取元素。但是低于例外。异常在线程"main"org.openqa.selenium.NoSuchElement异常:没有这样的元素:无法定位元素:{"方法":"链接文本","选择器":"CFDSDSR"} 我尝试切换到帧,但它给出了未找到的帧,但该帧存在: XPath: /html/body/table/tbody/tr/td/form/ta

  • 任何提示都会很有帮助!

  • 大家好,我正试图在网站中找到一个元素,但出于某种原因,它不允许我。该网页是Reddit的登录形式,我尝试输入用户名和密码,但当我列出所有输入时,它只出现在顶部搜索栏中。我想这是因为它就像在另一个“标签”一样,它会弹出到前面,但我不知道如何管理它。提前谢谢。

  • URL:http://bcmprod.brill.com/rsuite-cms/ 我正在尝试从上面的客户端站点自动下载手稿。我在C#中使用selenium phantomjs。 我有用户凭据。但是,组成登录表单的元素(例如用户名、密码)在页面源中不存在,但当您在浏览器中检查这些元素时,这些元素就存在了。 这些是我用来从“检查元素”中定位它们的xpath(ID是动态分配的,这就是我没有使用它们的原因

  • 我需要清理一个包含列表的网站。单击任何列表元素都会显示一个模式对话框,其中包含一些我想要删除的文本。在循环中这样做会导致过时的元素异常,所以这就是我最初做的 点击这个锚定标签元素会显示模态对话框,所以我将所有这些元素的文本存储在一个列表中,最后我做到了: 现在我得到没有元素异常错误,即使temp_name打印正确的文本。网页结构如下: 锚标签中的文本是我正在寻找的。我计划通过文本找到元素,然后单击

  • 我无法使用XPATH和CSS找到元素