Riaz Ladhani
Riaz Ladhani

Reputation: 4072

Selenium Python I want to check an element does not have a value I get the error NoSuchElementException: Message: Unable to find element with xpath

I have a HTML table with some rows and columns. I can get the value I want from for a row from column 3 which has the value "14" When a user deletes a record from the GUI I would like to check that 14 is not present anymore. I get the error:

NoSuchElementException: Message: Unable to find element with xpath == //table[@id="reporting_view_report_dg_main_body"]//tr//td[3]/div/span[@title="14"]

My XPATH to find the value is:

usn_id_element = self.get_element(By.XPATH, '//table[@id="reporting_view_report_dg_main_body"]//tr//td[3]/div/span[@title="14"]')

My function routine to check the value is not there is

def is_usn_id_not_displayed_in_all_records_report_results(self, usn_id): # When a record has been disconnected call this  method to check the record for usn id is not there anymore.
    usn_id_element = self.get_element(By.XPATH, '//table[@id="reporting_view_report_dg_main_body"]//tr//td[3]/div/span[@title="14"]')
    print "usn_id_element"
    print usn_id_element
    print usn_id_element.text
    if usn_id not in usn_id_element:
        return True

get_element routine:

from selenium.webdriver.common.by import By    
# returns the element if found
def get_element(self, how, what):
    # params how: By locator type
    # params what: locator value
    try:
        element = self.driver.find_element(by=how, value=what)
    except NoSuchElementException, e:
        print what
        print "Element not found "
        print e
        screenshot_name = how + what + get_datetime_now() # create screenshot name of the name of the element + locator + todays date time.  This way the screenshot name will be unique and be able to save
        self.save_screenshot(screenshot_name)
        raise
    return element

The HTML snippet is:

    <table id="reporting_view_report_dg_main_body" cellspacing="0" style="table-layout: fixed; width: 100%; margin-bottom: 17px;">
    <colgroup>
        <tbody>
            <tr class="GFNQNVHJM" __gwt_subrow="0" __gwt_row="0"\>
                <tr class="GFNQNVHIN" __gwt_subrow="0" __gwt_row="1"\>
                    <div __gwt_cell="cell-gwt-uid-9530" style="outline-style:none;">
                        <span title="14" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;padding-right: 1px;">14</span>
                    </div>
                </td>
                <td class="GFNQNVHIM GFNQNVHKM"\>
                    <td class="GFNQNVHIM GFNQNVHKM"\>

                    </tr>
                    <tr class="GFNQNVHIN" __gwt_subrow="0" __gwt_row="13">
                        <td class="GFNQNVHIM GFNQNVHJN GFNQNVHLM">
                            <td class="GFNQNVHIM GFNQNVHJN">
                                <td class="GFNQNVHIM GFNQNVHJN">
                                    <div __gwt_cell="cell-gwt-uid-9530" style="outline-style:none;">
                                        <span class="" title="14" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;padding-right: 1px;">14</span>
                                    </div>
                                </td>
                                <td class="GFNQNVHIM GFNQNVHJN"\>
                                    <td class="GFNQNVHIM GFNQNVHJN"\>
                                    </tr>
                                    <tr class="GFNQNVHJM" __gwt_subrow="0" __gwt_row="14"\>
                                    <tr class="GFNQNVHIN" __gwt_subrow="0" __gwt_row="15"\>
        </tbody>
</table>

How can check if the value is not there?

Thanks, Riaz

Upvotes: 0

Views: 754

Answers (1)

Grasshopper
Grasshopper

Reputation: 9058

Right now you are checking the attribute 'title' has a value of 14 and not the contents of the cell. What happens after the delete occurs? Does the span remain in the cell? Does the value of the cell becomes blank and does the value of the attribute 'title' also becomes blank?

The xpath below checks that the value of the cell is blank after deletion. Assumption you get a blank cell after deletion.

"//table[@id='reporting_view_report_dg_main_body']//tr//td[3]/div/span[.='']"

If you wanna check with value of title after deletion

"//table[@id='reporting_view_report_dg_main_body']//tr//td[3]/div/span[not(@title='14')]"

Upvotes: 1

Related Questions