c#
  • selenium
  • 2017-07-18 57 views -1 likes 
    -1

    我有一个记录列表,例如状态,部门,金额,标题和一些按钮。 如果我想断言比如我用下面的代码标题:基于条件在记录列表上按下按钮

    private IWebElement GetTitleElement(int actionRowNumber) 
        { 
         var xpath = $"//tr[@id = 'ctl00_ctl00_CPH_CPH_ActionsOverviewControl1_RadGridActions_ctl00__{actionRowNumber}']/td[9]"; 
         return BrowserFactory.Driver.FindElement(By.XPath(xpath)); 
        } 
    

    我做的类型,状态同样,部门

    然后我用了一个尝试捕捉方法要经过各记录,直到我发现在系统中所需的记录:

    public void CheckActionxxx(ActionTypes type, Enum.Departments departments, Enum.ActionStatus actionstatus, string title) 
        { 
         Wait(); 
         var actiontype = type; 
         try 
         { 
          for (var i = 0; i <= 4; i++) 
          { 
           if (GetTitleElement(i).Text == title && GetActionTypeElement(i).Text == actiontype.ToString()) 
           { 
            Assert.AreEqual(type.ToString(), GetActionTypeElement(i).Text); 
            Assert.AreEqual(actionstatus.ToString(), GetActionStatusElement(i).Text); 
            Assert.AreEqual(departments == Enum.Departments.None ? " " : departments.ToString(), 
            GetActionDepartmentElement(i).Text); 
            return; 
           } 
          } 
          throw new NoSuchElementException(); 
         } 
         catch (NoSuchElementException) 
         { 
          throw new NoSuchElementException($"Not found with'{title}'"); 
         } 
        } 
    

    因为ID是唯一曾在数之差(如0,1,2),我能够用整数

    部: // [@ ID = “ctl00_ctl00_CPH_CPH_ActionsOverviewControl1_RadGridActions_ctl00__0”]/TD [5] // [@ ID = “ctl00_ctl00_CPH_CPH_ActionsOverviewControl1_RadGridActions_ctl00__1”]/TD [5] // * [@ ID = “ctl00_ctl00_CPH_CPH_ActionsOverviewControl1_RadGridActions_ctl00__2”]/TD [5]

    状态: // [@ ID = “ctl00_ctl00_CPH_CPH_ActionsOverviewControl1_RadGridActions_ctl00__0”]/TD [2] // [@ ID = “ctl00_ctl00_CPH_CPH_ActionsOverviewControl1_RadGridActions_ctl00__1”]/TD [2] // * [@ id =“ctl00_ctl00_CPH_CPH_ActionsOverviewControl1_RadGridActions_ctl00__2”]/td [2]

    名称: // [@ ID = “ctl00_ctl00_CPH_CPH_ActionsOverviewControl1_RadGridActions_ctl00__0”]/TD [9] // [@ ID = “ctl00_ctl00_CPH_CPH_ActionsOverviewControl1_RadGridActions_ctl00__1”]/TD [9] // * [@ ID =“ctl00_ctl00_CPH_CPH_ActionsOverviewControl1_RadGridActions_ctl00__2 “]/TD [9]

    现在我想用一个尝试捕捉该发现基础上的工作方式相同,但该按钮的ID的按钮如下: // [@ ID =” ctl00_ctl00_CPH_CPH_ActionsOverviewControl1_RadGridActions_ctl00_ctl04_ButtonClose “] // [@ id =”c tl00_ctl00_CPH_CPH_ActionsOverviewControl1_RadGridActions_ctl00_ctl06_ButtonClose “] // [@ ID =” ctl00_ctl00_CPH_CPH_ActionsOverviewControl1_RadGridActions_ctl00_ctl08_ButtonClose “] // [@ ID =” ctl00_ctl00_CPH_CPH_ActionsOverviewControl1_RadGridActions_ctl00_ctl10_ButtonClose “] // * [@ ID =” ctl00_ctl00_CPH_CPH_ActionsOverviewControl1_RadGridActions_ctl00_ctl12_ButtonClose“]

    正如你可以看到它开始于ctl04并继续以两个步骤进行。

    我想不出如何设计我的私人webelement。我尝试过:

    private IWebElement GetActionCloseButtonElement(int actionRowNumber) 
        { 
         var xpath = $"//tr[@id = 'ctl00_ctl00_CPH_CPH_ActionsOverviewControl1_RadGridActions_ctl00_{actionRowNumber}_ButtonClose']"; 
         return BrowserFactory.Driver.FindElement(By.XPath(xpath)); 
        } 
    

    但是这并不奏效。

    回答

    0

    像这样的东西应该工作。

    从xpath开始,actionRowNumber应该是04,06,08,10,12。

    private IWebElement GetActionCloseButtonElement(int actionRowNumber) 
    { 
    return BrowserFactory.Driver.FindElement(By.Xpath("//tr[@id = 'ctl00_ctl00_CPH_CPH_ActionsOverviewControl1_RadGridActions_ctl00_ctl"+ actionRowNumber +"_ButtonClose']")); 
    } 
    
    +0

    我得到NoSuchElementException异常 – xxx2017

    +0

    尝试这种交换在xapth以“// * [@ ID =在与*开始时交换tr和看看会发生什么保持休息一样 – redp

    +0

    我在哪里把“actionRowNumber = 04,06,08,10,12'? – xxx2017

    相关问题