मैं एक टेबल पर लूप करने की कोशिश कर रहा हूं यदि आईडी कॉलम में idNumber है तो परिणाम कॉलम ढूंढें और यदि वह "स्वीकार करें" से मेल खाता है तो सच हो जाता है
मैं यहाँ फंस गया हूँ मेरा कोड है पहली पंक्ति हेडर है और कॉलम आईडी का मान "डी -19" है और कॉलम परिणाम में "स्वीकार करें" मान होना चाहिए

     public string  ResultsTable()
    {


        var tableElement = Browsers.getDriver.FindElement(By.Id("datatable"));
        var trElementList = tableElement.FindElements(By.TagName("tr"));
        var tdElementList = tableElement.FindElements(By.TagName("td"));
        /// var thElementList = tableElement.FindElements(By.TagName("th"));

        var columnIndex = -1;
        var ColumnConter = 1;
        const string desiredColumnHeader = "Result";
        const string desiredValue = "Accept";


        const string manuScrptId = "D-19";

        for (int tr = 0; tr <= trElementList.Count; tr++)
        {
            var row = trElementList[tr];

            IList<IWebElement> allCellsInRow = row.FindElements((By.XPath("./*")));
            foreach (var cell in allCellsInRow)
            {
                if (cell.Text== desiredColumnHeader)
                {
                    columnIndex = ColumnConter;

                }

                if (cell.Text == desiredValue)
                {

                }

                ColumnConter++;

            }



        }
0
Sarah A 15 अप्रैल 2020, 00:52

1 उत्तर

सबसे बढ़िया उत्तर

मैं मान लूंगा कि आपकी तालिका संरचना प्रत्येक उपयोग से अपरिवर्तित रहेगी और सही कॉलम तक पहुंचने के लिए कॉलम इंडेक्स का उपयोग करेगी और उन्हें खोजने के लिए टेबल हेडर से पूछताछ करेगी। अगर मैं गलत हूं तो कृपया मुझे बताएं और मैं अपना जवाब अपडेट कर दूंगा।

अधिकांश तालिकाओं में एक टैब होगा जिसमें शीर्षलेख जानकारी शामिल नहीं होगी और इसमें केवल पंक्तियां शामिल होंगी। मैं इसे पहले खोज रहा हूं और फिर पंक्तियों को ढूंढ रहा हूं।

मैं तब तक इन मिली पंक्तियों के माध्यम से लूप करता हूं जब तक कि मुझे वांछित पांडुलिपि आईडी नहीं मिलती है और फिर मैं एक मैच के लिए परिणाम कॉलम की जांच करूंगा और इसकी स्थिति के बूलियन को वापस कर दूंगा।

using System.Collections.ObjectModel;

public string ResultsTable()
     {    
          IWebElement tableElement = Browsers.FindElement(By.CssSelector("#datatable tbody"));
          ReadOnlyCollection<IWebElement> tableRows = tableElement.FindElements(By.TagName("tr"));

          // These are assumed values and need to be updated by you
          int idColumnIndex = 0;
          int resultColumnIndex = 5;

          const string desiredValue = "Accept";
          const string manuScrptId = "D-19";

          foreach (var row in tableRows)
          {
              ReadOnlyCollection<IWebElement> rowCells = row.FindElements(By.TagName("td"));

              if (rowCells[idColumnIndex].Text.Equals(manuScrptId))
              {
                  if (rowCells[resultColumnIndex].Text.Equals(desiredValue))
                  {
                      return true.ToString();
                  }
                  else
                  {
                      return false.ToString();
                  }
              }
          }

          return false.ToString();
        }
  • बूल के बजाय वापसी स्ट्रिंग में परिवर्तन किए। यदि आप वांछित मूल्य नहीं मिलने पर "झूठी" वापस नहीं करना चाहते हैं, तो आप इसके बजाय शून्य वापस कर सकते हैं।

यदि हर बार कॉलम हेडर प्राप्त करने की आवश्यकता के आसपास कोई रास्ता नहीं है तो यह काम करना चाहिए:

using System.Collections.Generic;
using System.Collections.ObjectModel;

public string ResultsTable()
     {
          IWebDriver Browsers = new ChromeDriver();

          Dictionary<string, int> columnHeaders = new Dictionary<string, int>();
          IWebElement tableElement = Browsers.FindElement(By.CssSelector("#datatable"));
          ReadOnlyCollection<IWebElement> tableRows = tableElement.FindElements(By.TagName("tr"));

          bool getColumnHeaders = true;
          const string desiredValue = "Accept";
          const string manuScrptId = "D-19";

          foreach (var row in tableRows)
          {
              if (getColumnHeaders)
              {
                  columnHeaders = GetHeaders(row);

                  getColumnHeaders = false;
              }
              else
              {
                  ReadOnlyCollection<IWebElement> rowCells = row.FindElements(By.TagName("td"));

                  if (rowCells[columnHeaders["Id"]].Text.Equals(manuScrptId))
                  {
                      if (rowCells[columnHeaders["Result"]].Text.Equals(desiredValue))
                      {
                          return true.ToString();
                      }
                      else
                      {
                          return null;
                      }
                  }
              }
          }

          return null;
        }

private Dictionary<string, int> GetHeaders(IWebElement headerRow)
     {
          Dictionary<string, int> columnHeaders = new Dictionary<string, int>();

          int counter = 0;

          ReadOnlyCollection<IWebElement> rowCells = headerRow.FindElements(By.TagName("td"));

          foreach(var cell in rowCells)
          {
              columnHeaders[cell.Text] = counter;

              counter += 1;
          }

          return columnHeaders;
      }
  • तुमने कहां देखा

RowCells[columnHeaders["Id"]].Text.Equals(manuScrptId) rowCells[columnHeaders["Result"]].Text.Equals(वांछित वैल्यू)

आपको "आईडी" और "परिणाम" को वांछित वास्तविक कॉलम हेडर टेक्स्ट से मेल खाना होगा।

0
RKelley 15 अप्रैल 2020, 02:04