2012-06-03 50 views
4

我试图做的做用硒的webdriver/C#编译箭头,但是当我尝试编译我得到这个错误:硒的webdriver C#的SendKeys(Keys.Arrowdown)

'Keys' is an ambiguous reference between 'OpenQA.Selenium.Keys' and 'System.Windows.Forms.Keys' (CS0104)

我的代码:

driver.FindElement(By.Id("ctl00_PlaceHolderMain_ctrlChangeBillingAddress_ctrlChangeBillingAddress_txtBillingAddress")).SendKeys(Keys.ArrowDown); 
driver.FindElement(By.Id("ctl00_PlaceHolderMain_ctrlChangeBillingAddress_ctrlChangeBillingAddress_txtBillingAddress")).SendKeys(Keys.Enter); 

回答

17

由于错误状态,在两个不同的命名空间中有两种不同的Keys类型。

您需要通过编写OpenQA.Selenium.Keys来明确地限定该类型。

0

我可以为您提供两种实现,但第一个只在本地工作:

  1. Element.SendKeys(OpenQA.Selenium.Keys.ArrowUp);

  2. char c = '\uE013'; // ASCII code ArrowUp

    Element.SendKeys(Convert.ToString(c));

0

同样是发生在我代码也是。在我的注册中,如 1.我有一个Address字段,用于从Google搜索中获取输入的地址,然后填写相应的字段,例如:Sub-urb,城市,邮政编码等。 2.有一个按钮附加一个文件(如从桌面浏览并选择任何图像或文档附加) 我得到错误“'钥匙'是OpenQA.Selenium.Keys'System.Windows.Forms.Keys' (CS0104) 之间的模糊参考然后我意识到这意味着在两个不同的命名空间中有两个不同的键类型。堂妹的地址选择,我的代码是:

driver.FindElement(By.XPath("//*[@id='PostalAddress_Address']")).SendKeys(Address); //Address to select from autofill and fill textboxes accordingly 
     Thread.Sleep(500); 
     driver.FindElement(By.XPath("//*[@id='PostalAddress_Address']")).SendKeys(Keys.ArrowDown); 
     driver.FindElement(By.XPath("//*[@id='PostalAddress_Address']")).SendKeys(Keys.Enter); 

和附加文件的代码是:

//Select and attach file from the computer 
     driver.FindElement(By.XPath("//*[@id='graduate-education']/div[4]/label")).Click(); //Click Attach file button 
     Thread.Sleep(500); 
     //driver.FindElement(By.XPath("//*[@id='graduate-education']/div[4]/label")).SendKeys(AttachFile); 
     SendKeys.SendWait(@"Complete File Path"); //Select the file from the location 
     Thread.Sleep(500); 
     SendKeys.SendWait(@"{Enter}"); 

命名空间添加了:

using OpenQA.Selenium; using System; using System.Threading; using System.Windows.Forms; 

因为 - 键类型不是从它实际上属于认识,所以我不得不改变地址字段的代码,并使用OpenQA.Selenium.keys.ArrowDown作为如下:

driver.FindElement(By.XPath("//*[@id='PostalAddress_Address']")).SendKeys(Address); //Address to select from autofill and fill textboxes accordingly 
     Thread.Sleep(500); 
     driver.FindElement(By.XPath("//*[@id='PostalAddress_Address']")).SendKeys(OpenQA.Selenium.Keys.ArrowDown); 
     driver.FindElement(By.XPath("//*[@id='PostalAddress_Address']")).SendKeys(OpenQA.Selenium.Keys.Enter); 

这为我工作,希望以同样的方式太