我正在为我正在从事的项目使用Selenium创建一些测试。由于某种原因,我无法使用其id,class,xpath等定位元素。也许我做错了什么。登录到应用程序后,页面如下所示:
如果您看到3个选项卡:“收藏夹”,“我的项目”,“所有项目”,它们都分别具有ID 12、13、14。当我单击“添加项目”按钮并单击“创建”时,将添加一个新项目,并且该项目位于“我的项目”下。因此,我的目的是在创建该项目后单击“我的项目”按钮,然后单击新项目的名称并进行编辑,以便我可以进行一些修改并继续进行测试。问题是,当我尝试单击“我的项目”按钮时,无法显示该属性,并且无法单击。添加新项目后,上述三个按钮的ID也将更改。因此,“收藏夹”现在的ID为15,“我的项目”的ID为16,“所有项目”的ID为17。谁能帮助我,让我知道定位这样的元素的正确方法是什么?我尝试了不同的方法,但到目前为止没有任何效果。以下是我测试中的代码和带有元素inspect的屏幕截图。预先谢谢您,任何帮助将不胜感激。
driver.FindElement(By.Id("UserName")).Click();
driver.FindElement(By.Id("UserName")).Clear();
driver.FindElement(By.Id("UserName")).SendKeys("admin");
driver.FindElement(By.XPath("(.//*[normalize-space(text()) and normalize-space(.)='Login'])[3]/following::table[1]")).Click();
driver.FindElement(By.Id("Password")).Click();
driver.FindElement(By.Id("Password")).Clear();
driver.FindElement(By.Id("Password")).SendKeys("admin");
driver.FindElement(By.XPath("(.//*[normalize-space(text()) and normalize-space(.)='Password'])[1]/following::input[2]")).Click();
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
driver.FindElement(By.Id("addproject-button")).Click();
driver.FindElement(By.Id("Name")).Click();
driver.FindElement(By.Id("Name")).Clear();
driver.FindElement(By.Id("Name")).SendKeys("ProjectX");
driver.FindElement(By.Id("Comments")).Click();
driver.FindElement(By.Id("Comments")).Clear();
driver.FindElement(By.Id("Comments")).SendKeys("the project");
driver.FindElement(By.Id("addproject")).Click();
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
//****************** THIS IS WHERE MY TEST FAILS-IT CAN'T LOCATE THE ELEMENT BY.ID*****************
driver.FindElement(By.XPath("//li[@class='ui-state-default ui-corner-top']/a[contains(.,'My projects')]")).Click();
//driver.FindElement(By.Id("ui-id-16")).Click();
//driver.FindElement(By.CssSelector("a.ui-tabs-anchor[id='ui-id-16']")).Click();
//driver.FindElement(By.Id("ProjectListTable")).FindElement(By.Id("project-list-tabs-content")).Click();//FindElement(By.ClassName("ui-state-default.ui-corner-top.ui-tabs-active.ui-state-active")).Click();
//driver.FindElement(By.ClassName("ui-tabs-anchor")).Click();
答案 0 :(得分:0)
我建议使用两个
from math import sqrt
def isprime(n):
for i in range(2,int(n**0.5)+1):
if n%i==0:
return False
return True
def primesquare(l):
flag=0
if len(l)==1:
n=l[0]
if(sqrt(n)%1==0):
return True
else:
for i in range(0,len(l)):
if(sqrt(l[i])%1==0):
if(i==0):
if(isprime(l[i+1])==True):
flag=1
else:
if(isprime(l[i-1])==True):
if(isprime[i+1]==True):
flag=1
else:
flag=0
else:
flag=0
if(flag==0):
return False
else:
return True
一个带有项目名称,第二个带有元素,您可以单击。然后,您可以在第一个列表上进行迭代,以获取需要项目所在的行号。然后,使用第二个列表单击该项目。