2016-06-07 53 views
3

我想在Sitecore 8.1中使用Chrome和Selenium以及c#運行一些自動化測試。我的代碼不想在Sitecore頁面中找到任何元素,特別是體驗編輯器。 我遇到「無法定位元素」警告。無法定位Sitecore 8.1中的元素(硒和C#)

例如:我想要的一個項目.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 /體/ DIV/DIV/DIV [1]/NAV [1]/[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(); 

這給了我一個錯誤關於無法使用複合類名。

我已經嘗試了一大堆其他選項/組合試圖拿起替代文字等,但我不能讓它拿起元素。

任何想法?讓我知道你是否需要更多信息。

感謝

回答

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

希望它會工作...... :)

+0

嗨,謝謝,試過了,它仍然給我「複合類名稱不允許」。 當我上次查看這個「複合」錯誤時,它建議取出空格,並用句號替換它們。但那並不奏效。另一個提到使用逗號然後完全停止,但這兩個選項都返回「無法定位元素」。 – geneticmaterial

+0

@geneticmaterial,這是因爲'.className'方法不支持複合類名稱。請參閱http://stackoverflow.com/questions/20361643/ –

+0

@Software_Engineer - 仍無法找到。 – geneticmaterial

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!